package 泛型2和JDK新增语法特性;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-06-14
 * Time: 20:50
 */
//1.手动模拟一个泛型
class MyArray<E> {
    public Object[] array = new Object[10];
    //输入
    public void setArray(int pos, E val) {
        this.array[pos] = val;
    }
    //输出

    public E getArray(int pos) {
        return (E)array[pos];
    }
}
/*//sealed修饰Animal 代表当前类是密封类  必须有子类
sealed class Animal permits PetDog2,Dog{

}

non-sealed class PetDog2 extends Animal {

}

//Dog 这个类  没有限制 可以被任何类继承
non-sealed class Dog extends Animal {

}
class PetDog extends Dog {

}*/
public class Test {
    public static void main(String[] args) {
        //2.密封类:sealed ,相较于final 前者可以有子类(前者必须存在子类)，后者没有子类

    }
/*    public static void main(String[] args) {
        String data = "one";
        int result = switch(data) {
            case "one" -> 1;
            case "two" -> 2;
            default -> -1;
        };
        System.out.println(result);
    }*/
        public static void main2(String[] args) {
        //1. yield关键字，从Java13开始引⼊。yield关键字⽤于从case的代码块中返回值。
        String data = "one" ;
        int result = 0 ; // 接收数据的返回值
        switch (data) {
            case "one":
                result = 1 ; // 为result重新赋值
                break ;
            case "two":
                result = 2 ; // 为result重新赋值
                break ;
            default:
                result = -1 ; // 为result重新赋值
                break ;
        }
        System.out.println(result) ;
    }
    public static void main1(String[] args) {
        MyArray<Integer> array = new MyArray<>();
        //变成泛型有两个好处：数据类型参数化，编译时自动进行类型检查和转换
        array.setArray(0, 10);
        array.setArray(1, 20);

        System.out.println(array.getArray(0));
        System.out.println(array.getArray(1));

        MyArray<String> array1 = new MyArray<String>();
        array1.setArray(0, "hello ");
        array1.setArray(1, "world!");
        System.out.println(array1.getArray(0) + array1.getArray(1));
    }
}
